import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

public class Lopta {
	private Vektor pozicija, brzina, ubrzanje;
	private Paint bojenje;
	private float poluprecnik;
	private double brzina_rotacije, ugao_rotacije;
	private AffineTransform transformacija = new AffineTransform();
	private static Ellipse2D krug= new Ellipse2D.Float(-2, -2, 4, 4);

	public Lopta(Vektor poc_pozicija, Vektor poc_brzina, float pp, Color b1,
			Color b2) {
		poluprecnik = pp;
		bojenje = new GradientPaint(-2, 0, b1, 2, 0, b2);
		brzina_rotacije = (Math.random() + 0.5);
		pozicija = poc_pozicija;
		brzina = poc_brzina;
		ubrzanje = new Vektor(0, 0);
		//krug = new Ellipse2D.Float(-poluprecnik, -poluprecnik, 2 * poluprecnik,2 * poluprecnik);
	}

	public void pomeri(float proteklo_vreme, double g, Rectangle granica) {
		ugao_rotacije += brzina_rotacije * proteklo_vreme;
		ubrzanje.x(0);
		ubrzanje.y(g);
		brzina.dodaj(ubrzanje.proizvod(proteklo_vreme));
		pozicija.dodaj(brzina.proizvod(proteklo_vreme));

		if (pozicija.x() - poluprecnik < granica.getX())// da li loptica izasla sa leve strane
		{//vrati se loptica u prostor,prouci izraze
			pozicija.x(2 * (granica.getX() + poluprecnik) - pozicija.x());
			brzina.x(-brzina.x());//novo kretanje je u suprotnom pravcu ovim sada  
		}
		
		//ako doslo do kolizije sa desnom ivicom
		if (pozicija.x() + poluprecnik > granica.getX() + granica.getWidth()) {
			pozicija.x(2 * (granica.getX() + granica.getWidth() - poluprecnik)- pozicija.x());
			brzina.x(-brzina.x());
		}

		//doslo do kolizije sa donjom linijom
		if (pozicija.y() + poluprecnik > granica.getY() + granica.getHeight()) {
			pozicija.y(2 * (granica.getY() + granica.getHeight() - poluprecnik)- pozicija.y());
			brzina.y(-brzina.y());
		}
	}

	public void crtaj(Graphics2D g2D) {
		
		transformacija.setToIdentity();
		transformacija.translate(pozicija.x(), pozicija.y());
		transformacija.scale(2*poluprecnik/4, 2*poluprecnik/4);
		transformacija.rotate(ugao_rotacije);

		g2D.setTransform(transformacija);
		g2D.setPaint(bojenje); 
		
		g2D.fill(krug);
		
	}
}
